#include <iostream>
#include <initializer_list>
#include <tuple>

int main() {
    // auto 关键字示例
    auto num = 42;
    auto str = std::string("Hello, C++11");
    std::cout << "使用 auto 推断 num 的类型为: " << typeid(num).name() << ", 值为: " << num << std::endl;
    std::cout << "使用 auto 推断 str 的类型为: " << typeid(str).name() << ", 值为: " << str << std::endl;

    // decltype 关键字示例
    int x = 10;
    decltype(x) y = 20;
    std::cout << "使用 decltype 获取 x 的类型并定义 y, y 的类型为: " << typeid(y).name() << ", 值为: " << y << std::endl;

    // nullptr 关键字示例
    int* ptr = nullptr;
    if (ptr == nullptr) {
        std::cout << "ptr 是一个空指针" << std::endl;
    }

    // std::initializer_list 示例
    std::initializer_list<int> list = {1, 2, 3};
    std::cout << "std::initializer_list 中的元素: ";
    for (auto it : list) {
        std::cout << it << " ";
    }
    std::cout << std::endl;

    // std::tuple 示例
    std::tuple<int, float, char> t(1, 2.0f, 'a');
    std::cout << "std::tuple 中的第一个元素: " << std::get<0>(t) << std::endl;
    std::cout << "std::tuple 中的第二个元素: " << std::get<1>(t) << std::endl;
    std::cout << "std::tuple 中的第三个元素: " << std::get<2>(t) << std::endl;

    return 0;
}